package activitys;

import utils.BaseAsync;
import utils.Constantes;
import utils.PreferencesHelper;
import utils.Constantes.Choferes;

import com.example.baserapitaxi.BaseLoginActivity;

import controladores.ControladorChoferes;
import controladores.ControladorPasajeros;
import controladores.ControladorViajes;
import entidades.Viaje;
import entidades.usuarios.Chofer;
import entidades.usuarios.Pasajero;

import activitys.RegistroPasajeroActivity;
import activitys.SolicitarActivity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class LoginPasajeroActivity extends BaseLoginActivity
{
	@Override
	protected void login(String email, String clave)
	{
		if (check)
			new CheckDatos(email, clave).execute();
		else
			new IniciarSesion(email, clave).execute();		
	}

	@Override
	public void registrar(View view)
	{
		Intent intent = new Intent (LoginPasajeroActivity.this, RegistroPasajeroActivity.class);
		startActivity(intent);
		
//		getDialogoRegistro().show();
	}
	
	private Dialog getDialogoRegistro()
	{
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Registro");
		builder.setItems(new String[]
		{ "Soy chofer.", "No tengo usuario." },
				new DialogInterface.OnClickListener()
				{
					public void onClick(DialogInterface dialog, int which)
					{
						Intent intent;
						
						if (which == 0)
						{
							// Tiene usuario chofer.
							intent = new Intent (LoginPasajeroActivity.this, LoginPasajeroActivity.class);
							intent.putExtra(BaseLoginActivity.booleanCheck, true);
						}
						else
						{
							// No tiene usuario;
							intent = new Intent (LoginPasajeroActivity.this, RegistroPasajeroActivity.class);
						}
						
						startActivity(intent);
					}
				});
		return builder.create();

	}
	
	private class IniciarSesion extends BaseAsync
	{
		long res;
		
		private Pasajero pasajero;
		
		public IniciarSesion (String email, String clave)
		{
			super (LoginPasajeroActivity.this, "Iniciando...");
			
			this.pasajero = new Pasajero(email, clave);
		}
		
		@Override
		protected Void doInBackground(Void... params)
		{
			String gcm = new PreferencesHelper(getApplicationContext()).getSharedPreferences().getString(PreferencesHelper.GCM, "");
			
			res = new ControladorPasajeros().iniciarSesion(pasajero, gcm);
					
			return null;
		}
		
		@Override
		protected void onPostExecute(Void result)
		{
			super.onPostExecute(result);
			
			if (res != -1)
			{
				pasajero.setId(res);
				
				PreferencesHelper helper = new PreferencesHelper(getApplicationContext());
				helper.guardarDatos(pasajero);
				
				new BuscarViaje(pasajero.getId()).execute();
			}
			else
				Toast.makeText(LoginPasajeroActivity.this, "Datos incorrectos.", Toast.LENGTH_LONG).show();
		}
	}
	
	private class CheckDatos extends BaseAsync
	{
		private String email;
		private String clave;
		
		private int res;
		
		public CheckDatos (String email, String clave)
		{
			super (LoginPasajeroActivity.this, "Verificando...");
			
			this.email = email;
			this.clave = clave;
		}
		
		@Override
		protected Void doInBackground(Void... arg0)
		{
			try
			{
				res = new ControladorPasajeros().registrarPasajero(email, clave);
			
				return null;
			}
			catch(Exception e)
			{
				Log.i("LOG", e.getMessage());
				return null;
			}
		}
		
		@Override
		protected void onPostExecute(Void result)
		{
			super.onPostExecute(result);
			
			String mensaje = "";
			boolean volver = true;;
			
			switch (res)
			{
			case Constantes.Registro.NULL:
				mensaje = "Datos incorrectos!";
				volver = false;
				break;
			case Constantes.Registro.EMAIL_EXISTENTE:
				mensaje = "Ya existe ese Email! D:<";
				volver = true;
				break;
			case Constantes.Registro.OK:
				mensaje = "Registrado :D";
				volver = true;
				break;
			}
			
			alert(mensaje, volver);
		}
		
		private void alert (String mensaje, final boolean volver)
		{
			AlertDialog.Builder builder = new AlertDialog.Builder(LoginPasajeroActivity.this);
			builder.setMessage(mensaje)
			       .setCancelable(false)
			       .setPositiveButton("OK", new DialogInterface.OnClickListener() {
			           public void onClick(DialogInterface dialog, int id) 
			           {
			                if (volver)
			                	finish();
			           }
			       });
			AlertDialog alert = builder.create();
			alert.show();
		}
	}
	
	private class BuscarViaje extends BaseAsync
	{
		private Viaje viaje;
		private long idPasajero;
		
		public BuscarViaje (long idPasajero)
		{
			super (LoginPasajeroActivity.this, "Cargando...");
			
			this.idPasajero = idPasajero;
		}
		
		@Override
		protected Void doInBackground(Void... arg0)
		{
			viaje = new ControladorViajes().getViajePasajero(idPasajero);
			
			return null;
		}
		
		@Override
		protected void onPostExecute(Void result)
		{
			super.onPostExecute(result);
			
			Class<?> iniciar;
			
			if (viaje == null)
				iniciar = SolicitarActivity.class;
			else
				iniciar = ViajeActivity.class;
			
			Intent intent = new Intent (LoginPasajeroActivity.this, iniciar);
			startActivity(intent);
			
			finish();
		}
	}
}
